// 1280. [排序]话单发送 https://oj.rnd.huawei.com/problems/1280/details
// 小心for第三语句的执行顺序,先cap减,再i++
// for (; i < vtBill.size() && vtBill[i].len <= cap;  cap -= vtBill[i].len,
// i++);
//某核心网设备向计费网关发送话单（一个话单指一条通话记录的信息），发送规则如下：
//每个话单具有长度和优先级两个属性，优先级值越小表示优先级越高，高优先级的发送完，才能发送次优先级的。
//设备有一个承载规格，表示发送话单总容量的阈值，发送话单的总长度不能超过承载规格。
//现给定设备的承载规格和待发送话单（长度和优先级）列表，请计算最多可以发送多少个话单。
//输入 第一行是正整数 cap ，表示设备的承载规格，取值范围：[1,10000]
//第二行是正整数 num ，表示待发送话单的数量，取值范围：[0,100]
//第三行 num 个整数，依次表示每个待发送话单的长度，每个值的范围：[0, 1000]
//第四行 num 个整数，依次表示每个待发送话单的优先级，每个值的范围：[0,30]
//第三行和第四行的数据一一对应，表示同一个话单的长度和优先级。
//输出一个整数，表示最多能发送话单的个数。
//输入 110
// 5
// 50 20 30 10 50
// 2 2 1 3 1
//输出 3
//首先尝试发送优先级为 1 的话单，长度分别是30和50，长度之和在承载规格范围内，
//优先级 1 的两个话单全部完成发送，剩余容量为30。
//接着尝试发送优先级为 2
//的话单，长度20的被发送，剩余容量为10，长度50的无法发送。 因优先级 2
//的话单未发送完（仍剩余一条），优先级3的所有话单都无法发送。
//所以，最多能发送的话单数为 3 。

#include <algorithm>
#include <iostream>
#include <utility>
#include <vector>
using namespace std;

//#define DEBUG
#ifdef DEBUG
#define PF(...) printf(__VA_ARGS__)
#else
#define PF(...)
#endif

class Solution {
 public:
  // 待实现函数，在此函数中填入答题代码
  struct Bill {
    int pri = 0, len = 0;
  };
  int GetMaxSendNum(int cap, const vector<int> &bill, const vector<int> &pri) {
    vector<Bill> vtBill;
    for (size_t i = 0; i < bill.size(); i++)
      vtBill.push_back({pri[i], bill[i]});
    std::sort(vtBill.begin(), vtBill.end(), [](Bill b1, Bill b2) {
      if (b1.pri == b2.pri) return b1.len < b2.len;
      return b1.pri < b2.pri;
    });
    size_t i = 0;
    for (; i < vtBill.size() && vtBill[i].len <= cap; cap -= vtBill[i].len, i++)
      ;
    return i;
  }
};

// 以下为考题输入输出框架，此部分代码不建议改动
inline int ReadInt() {
  int number;
  std::cin >> number;
  return number;
}

template <typename T>
inline std::vector<T> ReadVector(int size) {
  std::vector<T> objects(size);
  for (int i = 0; i < size; ++i) {
    std::cin >> objects[i];
  }
  return objects;
}

int main() {
  int cap = ReadInt();
  int n = ReadInt();
  vector<int> bill = ReadVector<int>(n);
  vector<int> pri = ReadVector<int>(n);
  Solution solu;
  int res = solu.GetMaxSendNum(cap, bill, pri);
  cout << res;
  return 0;
}